﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BookLibrary;
using System.Data;
using System.Drawing;
using System.Windows.Forms;

namespace Web_Jolien
{
    public partial class _Default : System.Web.UI.Page
    {
        public BookLibrary.Database database = Database.Instance;
        private MyDataSet.BookRow Row;
        private String selectedKlaslijst;
        private int selectedRowInKlaslijstData = -1;
        private MyDataSet.Klaslijst_BookRow kb;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Populate();
            }
        }

        public void Populate()
        {
            if (!Page.IsPostBack)
            {

                if (!chbCategorie.Checked)
                {
                    cmbCategorie.Enabled = false;
                }

                if (!chbUitgever.Checked)
                {
                    cmbUitgever.Enabled = false;
                }

                //plaats alle cat in een array
                object[] categorieen = new object[database.categorieTable.Rows.Count];
                for (int i = 0; i < categorieen.Length; i++)
                {
                    categorieen[i] = database.categorieTable.Rows[i].ItemArray[1];
                }
                //gebruik de cat als datasource voor de dropdown
                cmbCategorie.DataSource = categorieen;
                cmbCategorie.DataBind();

                //plaats alle uit in een array
                object[] uitgevers = new object[database.uitgeverTable.Rows.Count];
                for (int i = 0; i < uitgevers.Length; i++)
                {
                    uitgevers[i] = database.uitgeverTable.Rows[i].ItemArray[1];
                }
                //gebruik de uit als datasource voor dropdown
                cmbUitgever.DataSource = uitgevers;
                cmbUitgever.DataBind();

                //plaats alle klaslijsten in een array
                object[] klaslijsten = new object[database.klaslijstTable.Rows.Count];
                for (int i = 0; i < klaslijsten.Length; i++)
                {
                    klaslijsten[i] = database.klaslijstTable.Rows[i].ItemArray[0];
                }
                //gebruik de klaslijsten als datasource voor de dropdown
                klasLijst.DataSource = klaslijsten;
                klasLijst.DataBind();
                klaslijstKopie.DataSource = klaslijsten;
                klaslijstKopie.DataBind();
                toonKlaslijst();

                Row = null;
                //zorg dat er maar 1 rij per keer kangeselecteerd worden
                //dgvAllBooks.MultiSelect = false;
                ApplyFilter();
            }
        }

        private void ApplyFilter()
        {
            clearBookDetail();
            if (database == null)
            {
                System.Diagnostics.Debug.WriteLine("NULL!");
            }
            var results = from book in database.bookTable
                          join cat in database.categorieTable on book.CategorieId equals cat.Id
                          join uit in database.uitgeverTable on book.UitgeverId equals uit.Id
                          //Dikke vette query
                          where (titelTekst.Text == "" || book.Titel.Contains(titelTekst.Text.ToUpper())) && (ISBNtekst.Text == "" || book.Isbn.Contains(ISBNtekst.Text)) && ((!chbCategorie.Checked) || cmbCategorie.SelectedItem.ToString().Equals(cat.Description)) && ((!chbUitgever.Checked) || cmbUitgever.SelectedItem.ToString().Equals(uit.Description))
                          select book;
            DataTable copy = new DataTable();
            if (results.ToArray().Length != 0)
            {
                copy = results.CopyToDataTable();
                copy.Columns.Remove("Isbn");
                copy.Columns.Remove("Status");
                copy.Columns.Remove("CategorieId");
                copy.Columns.Remove("UitgeverId");
            }

            dgvAllBooks.DataSource = copy;
            dgvAllBooks.DataBind();
        }

        private void clearBookDetail()
        {
            Row = null;
        }

        protected void titelTekst_TextChanged(object sender, EventArgs e)
        {
            ApplyFilter();
        }

        protected void ISBNtekst_TextChanged(object sender, EventArgs e)
        {
            ApplyFilter();
        }

        protected void Categorie_CheckedChanged(object sender, EventArgs e)
        {
            if (chbCategorie.Checked)
            {
                cmbCategorie.Enabled = true;
            }
            else
            {
                cmbCategorie.Enabled = false;
            }
        }

        protected void Uitgeverij_CheckedChanged(object sender, EventArgs e)
        {
            if (chbUitgever.Checked)
            {
                cmbUitgever.Enabled = true;
            }
            else
            {
                cmbUitgever.Enabled = false;
            }
        }

        protected void categoriedropdown_SelectedIndexChanged(object sender, EventArgs e)
        {
            ApplyFilter();
        }

        protected void uitgeverijdropdown_SelectedIndexChanged(object sender, EventArgs e)
        {
            ApplyFilter();
        }

        protected void KlasLijst_SelectedIndexChanged(object sender, EventArgs e)
        {
            toonKlaslijst();
        }

        private void toonKlaslijst()
        {
            selectedKlaslijst = klasLijst.SelectedValue.ToString();
            //Laad de klaslijst
            var query = from klas in database.klaslijstTable
                        join boeken in database.klas_bookTable on klas.Id equals boeken.KlaslijstId
                        join boek in database.bookTable on boeken.BookId equals boek.Isbn
                        where klas.Id.Equals(selectedKlaslijst)
                        select boek;
            DataTable copy = new DataTable();
            if (query.ToArray().Length != 0)
            {
                copy = query.CopyToDataTable();
                copy.Columns.Remove("Status");
            }
            klasLijstData.DataSource = copy;
            klasLijstData.DataBind();
        }

        protected void naarLijst_Click(object sender, EventArgs e)
        {
            selectedKlaslijst = klasLijst.SelectedValue.ToString();
            dgvAllBooks_SelectedIndexChanged(sender, e);
            //System.Windows.Forms.MessageBox.Show(Row.Titel.ToString());
            //System.Windows.Forms.MessageBox.Show(selectedKlaslijst.ToString());
            if (Row != null && selectedKlaslijst != null)
            {
                //System.Windows.Forms.MessageBox.Show("in if");
                kb = (MyDataSet.Klaslijst_BookRow)database.klas_bookTable.NewRow();
                kb.BeginEdit();
                kb.KlaslijstId = selectedKlaslijst;
                kb.BookId = Row.Isbn;
                kb.EndEdit();
                try
                {
                    //System.Windows.Forms.MessageBox.Show("in try voor db add");
                    database.klas_bookTable.AddKlaslijst_BookRow(kb);
                    //System.Windows.Forms.MessageBox.Show("in try na db add");
                }
                catch (Exception)
                {
                    //System.Windows.Forms.MessageBox.Show("in catch");
                    //TODO Exception
                }
                KlasLijst_SelectedIndexChanged(null, null);
            }
        }

        protected void uitLijst_Click(object sender, EventArgs e)
        {
            selectedKlaslijst = klasLijst.SelectedValue.ToString();
            klasLijstData_SelectedIndexChanged(sender, e);
            selectedRowInKlaslijstData = klasLijstData.SelectedRow.RowIndex;
            String isbn = klasLijstData.Rows[selectedRowInKlaslijstData].Cells[1].Text.ToString();
            if (selectedRowInKlaslijstData > -1)
            {
                //System.Windows.Forms.MessageBox.Show("in if");
                System.Diagnostics.Debug.WriteLine(klasLijstData.Rows[selectedRowInKlaslijstData].Cells[1].Text.ToString());
                var detail = from book in database.bookTable
                             where book.Isbn.Equals(isbn)
                             select book;
                MyDataSet.BookRow Row = detail.First();
                //klasLijstData.DeleteRow(selectedRowInKlaslijstData);
                //selectedRowInKlaslijstData = -1;
                database.klas_bookAdapt.Delete(selectedKlaslijst, isbn);
                database.UpdateClassList();
                KlasLijst_SelectedIndexChanged(null, null);
            }
        }

        protected void wisLijst_Click(object sender, EventArgs e)
        {
            int RowCount = klasLijstData.Columns.Count - 2;
            while (RowCount > 0)
            {
                RowCount--;
                System.Diagnostics.Debug.WriteLine(RowCount + " " + RowCount);
                String isbn = klasLijstData.Rows[RowCount].Cells[1].Text.ToString();
                database.klas_bookAdapt.Delete(klasLijst.SelectedItem.ToString(), isbn);
                klasLijstData.DeleteRow(RowCount);
            }
            database.UpdateClassList();
        }

        protected void annuleer_Click(object sender, EventArgs e)
        {
            database.Annuleer();
        }

        protected void overschrijf_Click(object sender, EventArgs e)
        {

        }

        protected void voegToe_Click(object sender, EventArgs e)
        {
            database.PersistKlasLijst();
        }

        protected void dgvAllBooks_SelectedIndexChanged(object sender, EventArgs e)
        {
            bookDetail.InnerText = "";
            int rij = dgvAllBooks.SelectedRow.RowIndex;
            dgvAllBooks.SelectedRowStyle.BackColor = Color.LightBlue;
            if (rij > -1)
            {
                var detail = from book in database.bookTable
                             where book.Titel.Equals(dgvAllBooks.Rows[rij].Cells[0].Text.ToString())
                             select book;
                if (detail.Count() != 0)
                {
                    Row = detail.First();
                    String details = "Titel: " + Row.Titel +
                        "\nISBN: " + Row.Isbn +
                        "\nUitgever: " + Row.UitgeverId + " Categorie: " + Row.CategorieId +
                        "\nPrijs: " + Row.Prijs;
                    bookDetail.InnerText = details;
                    bookDetail.Visible = true;
                }
            }
        }

        protected void klasLijstData_SelectedIndexChanged(object sender, EventArgs e)
        {
            int rij = klasLijstData.SelectedRow.RowIndex;
            klasLijstData.SelectedRowStyle.BackColor = Color.LightBlue;
            if (rij > -1)
            {
                //System.Windows.Forms.MessageBox.Show("in if1");
                //System.Windows.Forms.MessageBox.Show(klasLijstData.Rows[rij].Cells[1].Text.ToString());
                var detail = from book in database.bookTable
                             where book.Isbn.Equals(klasLijstData.Rows[rij].Cells[1].Text.ToString())
                             select book;
                if (detail.Count() != 0)
                {
                    //System.Windows.Forms.MessageBox.Show("in if2");
                    Row = detail.First();
                    String details = "Titel: " + Row.Titel +
                        "\nISBN: " + Row.Isbn +
                        "\nUitgever: " + Row.UitgeverId + " Categorie: " + Row.CategorieId +
                        "\nPrijs: " + Row.Prijs;
                    bookDetail.InnerText = details;
                    bookDetail.Visible = true;
                }
            }
        }

        protected override void Render(HtmlTextWriter writer)
        {
            foreach (GridViewRow row in dgvAllBooks.Rows)
            {
                if (row.RowType == DataControlRowType.DataRow)
                {
                    row.Attributes["onmouseover"] = "this.style.color='#009900'";
                    row.Attributes["onmouseout"] = "javascript:hidePopup()";
                    row.Attributes["onmouseout"] += ";this.style.color='#696969'";
                    // Set the last parameter to True
                    // to register for event validation.
                    row.Attributes["onclick"] =
                     ClientScript.GetPostBackClientHyperlink(dgvAllBooks, "Select$" + row.DataItemIndex, true);
                    row.Attributes["onmouseover"] += ";javascript:getPosition()";
                }
            }
            foreach (GridViewRow row in klasLijstData.Rows)
            {
                if (row.RowType == DataControlRowType.DataRow)
                {
                    row.Attributes["onmouseover"] = "this.style.color='#009900'";
                    row.Attributes["onmouseout"] = "javascript:hidePopup()";
                    row.Attributes["onmouseout"] += ";this.style.color='#696969'";
                    // Set the last parameter to True
                    // to register for event validation.
                    row.Attributes["onclick"] =
                     ClientScript.GetPostBackClientHyperlink(klasLijstData, "Select$" + row.DataItemIndex, true);
                    row.Attributes["onmouseover"] += ";javascript:getPosition()";
                }
            }
            base.Render(writer);
        }
    }
}
